package com.e1xp.deport_management_system.utils;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @author E1xP@foxmail.com
 * @version 1.0
 * @PACKAGE_NAME com.e1xp.deport_management_system.utils
 * @CLASS_NAME Utils
 * @Description TODO
 * @Date 2021/4/8 下午 11:13
 **/
public class Utils {
    /**
     * 用于订单状态
     *
     * @param status 订单状态
     * @return String
     */
    public static String statusMapping(String status) {
        switch (status) {
            case "0":
                return "待处理";
            case "1":
                return "拣货中";
            case "2":
                return "待发货";
            case "3":
                return "已发货";
            default:
                return "错误";
        }
    }

    /**
     * 用于映射用户类型
     *
     * @param type 用户类型
     * @return String
     */
    public static String userTypeMapping(int type) {
        switch (type) {
            case 0:
                return "管理员";
            case 1:
                return "员工";
            case -1:
                return "员工（停用";
            case -2:
                return "管理员（停用";
            default:
                return "无此类型";
        }
    }

    /**
     * 用于获取日期列表
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return List 日期列表
     */
    public static List<String> getDateList(LocalDate startTime, LocalDate endTime) {
        DateTimeFormatter format = DateTimeFormatter.ofPattern("MM-dd");
        LocalDate date = LocalDate.from(startTime);
        List<String> dateList = new ArrayList<>();
        for (; !date.isAfter(endTime); date = date.plusDays(1)) {
            dateList.add(format.format(date));
        }
        return dateList;
    }

    /**
     * 用于抽取数据成列表
     *
     * @param dateList 日期列表
     * @param dataList 数据列表
     * @return List int
     */
    public static List<Integer> formatData(List<String> dateList, List<AnalyseData> dataList) {
        Map<String, AnalyseData> analyseDataMap = dataList.stream().collect(Collectors.toMap(AnalyseData::getTime, Function.identity()));
        List<Integer> returnList = new ArrayList<>();
        for (String item : dateList) {
            if (analyseDataMap.containsKey(item)) {
                returnList.add(analyseDataMap.get(item).getCount());
            } else {
                returnList.add(0);
            }
        }
        return returnList;
    }
}
